home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / crt / sun4.md / RCS / gstart.s,v < prev    next >
Text File  |  1991-11-11  |  3KB  |  127 lines

  1. head     1.2;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @@;
  7.  
  8.  
  9. 1.2
  10. date     91.11.11.15.56.50;  author jhh;  state Exp;
  11. branches ;
  12. next     1.1;
  13.  
  14. 1.1
  15. date     91.01.23.21.38.07;  author jhh;  state Exp;
  16. branches ;
  17. next     ;
  18.  
  19.  
  20. desc
  21. @@
  22.  
  23.  
  24. 1.2
  25. log
  26. @added _environ variable
  27. @
  28. text
  29. @/*
  30.  * gstart.s --
  31.  *
  32.  *    Profiling crt0 for sun4.  This is the header that sets up argc,
  33.  *      argv and envp for main() and then jumps there.  It also initializes
  34.  *      the values of certain registers.  The profiling routines are
  35.  *      initialized.
  36.  *
  37.  * Copyright 1989 Regents of the University of California
  38.  * Permission to use, copy, modify, and distribute this
  39.  * software and its documentation for any purpose and without
  40.  * fee is hereby granted, provided that the above copyright
  41.  * notice appear in all copies.  The University of California
  42.  * makes no representations about the suitability of this
  43.  * software for any purpose.  It is provided "as is" without
  44.  * express or implied warranty.
  45.  */
  46.  
  47. #include <kernel/machConst.h>
  48. .seg    "data"
  49. .asciz    "$Header$"
  50.  
  51. .align    8
  52. .seg    "text"
  53.  
  54. .globl    gstart
  55.  
  56. /*
  57.  * The stack pointer should be double-word aligned when it gets here.  At
  58.  * MACH_FULL_STACK_FRAME beneath it lies the user stack put together in
  59.  * DoExec().  At the top of this is the argc integer.  Below that is the argv
  60.  * stuff and below that is the
  61.  * environment stuff.
  62.  */
  63. gstart:
  64.     /* Mark last stack frame so debugger can tell bottom of stack. */
  65.     clr    %fp
  66.  
  67. /*----------------------------------------------------------------------*/
  68.  
  69.         /*
  70.      *  Special stuff for dealing with profiling.  Except for this
  71.      *  stuff, this file is the same as start.s
  72.      */
  73.  
  74.     sethi   %hi(0x2000), %o0        /* 0x2000 = start of text segment   */
  75.         sethi   %hi(_etext), %o1
  76.     call    _monstartup             /* monstartup(etext, 0x2000)        */
  77.     or      %lo(_etext), %o1, %o1
  78.  
  79.         sethi   %hi(__mcleanup), %o0
  80.     call    _atexit                         /* atexit(_mcleanup) */
  81.     or      %lo(__mcleanup), %o0, %o0
  82.  
  83.     sethi   %hi(_errno),%o0
  84.     st    %g0,[%o0+%lo(_errno)]           /* errno = 0 */
  85.  
  86. /*----------------------------------------------------------------------*/
  87.  
  88.     /*
  89.      * Argc is the first word on the top of the stack (top == lowest addr).
  90.      * This is followed immediately by the array of pointers to arguments
  91.      * (argv) and this is followed immediately by the array of pointers to
  92.      * the environment (envp).  We must calculate the address of envp by
  93.      * using the number of arguments given in argc.
  94.      * environ = (char *) argv + (argc + 1) * 4.
  95.      * And argv = top of stack plus sizeof (Address).
  96.      */
  97.     mov    %sp, %VOL_TEMP1
  98.     add    %VOL_TEMP1, MACH_FULL_STACK_FRAME, %VOL_TEMP1
  99.     ld    [%VOL_TEMP1], %o0        /* argc */
  100.     add    %VOL_TEMP1, 4, %o1        /* argv pointer */
  101.     add    %o0, 1, %o2
  102.     sll    %o2, 2, %o2
  103.     add    %o2, %o1, %o2        /* envp pointer */
  104.     set    _environ, %o3
  105.     st    %o2, [%o3]        /* store addr of env into environ */
  106.  
  107.     /* Off to main routine with arguments argc, argv, envp */
  108.     call    _main, 3
  109.     nop
  110.     call    _exit
  111.     nop
  112.  
  113. @
  114.  
  115.  
  116. 1.1
  117. log
  118. @Initial revision
  119. @
  120. text
  121. @a21 4
  122. .align    4
  123. .globl    _environ
  124. _environ:
  125. .word    0xffffffff
  126. @
  127.